#ifndef SC_FILE_H
#define SC_FILE_H

#include "common.h"

#include <stdbool.h>

#ifdef _WIN32
# define SC_PATH_SEPARATOR '\\'
#else
// 目录路径分隔符
# define SC_PATH_SEPARATOR '/'
#endif

#ifndef _WIN32

/**
 * Indicate if an executable exists using $PATH
 * 判断一个可执行命令是不是存在于当前机器的PATH路径下
 *
 * In practice, it is only used to know if a package manager is available on
 * the system. It is only implemented on Linux.
 * @param file
 * @return 
 */
bool
sc_file_executable_exists(const char *file);
#endif

/**
 * 返回当前正在执行中的程序的绝对路径。返回的结果需要用free()函数进行释放。仅在LINUX下有效
 * Return the absolute path of the executable (the scrcpy binary)
 *
 * The result must be freed by the caller using free(). It may return NULL on
 * error.
 * @return 当前正在执行中的程序的绝对路径，出错返回NULL
 */
char *
sc_file_get_executable_path(void);

/**
 * 获取指定文件名的本地目录下的可执行文件
 * Return the absolute path of a file in the same directory as the executable
 *
 * The result must be freed by the caller using free(). It may return NULL on
 * error.
 * @param name
 * @return 
 */
char *
sc_file_get_local_path(const char *name);

/**
 * 判断一个路径为普通的文件且不为一个目录。
 * Indicate if the file exists and is not a directory
 * @param path 文件的路径
 * @return 普通文件返回true，否则返回false
 */
bool
sc_file_is_regular(const char *path);

#endif
